<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  
</body>
</html>


<script>
  // - **预解析** 其实就是聊聊 js 代码的编译和执行
  // - js 是一个解释型语言，就是在代码执行之前，先对代码进行通读和解释，然后在执行代码
  // - 也就是说，我们的 js 代码在运行的时候，会经历两个环节 **解释代码** 和 **执行代码**


  // ### 解释代码
  // - 因为是在所有代码执行之前进行解释，所以叫做 **预解析（预解释）**
  // - 需要解释的内容有两个
  //   - 声明式函数
  //     - 在内存中先声明有一个变量名是函数名，并且这个名字代表的内容是一个函数
  //   - `var` 关键字
  //     - 在内存中先声明有一个变量名


  // fn() // 正常执行 '我是 fn 函数'
  // console.log(num) // undefined
  // function fn() {
  //   console.log('我是 fn 函数')
  // }
  // var num = 100


  // 解析的结果如下
  // function fn() {
  //   console.log('我是 fn 函数')
  // }
  // var num;
  // fn();
  // console.log(num);
  // num = 100;










  // console.log(a); // undefined
  // console.log(fn()); // error: fn is not a function
  // var a = 5;
  // var fn = function() {
  //   console.log("fn");
  // }
  // function fn() {
  //   console.log("fn");
  // }



  // var fn = function() {
  //   console.log(111);
  // }
  // function fn() {
  //   console.log(222);
  // }
  // fn();

  // 上面的解析完之后变成了
  // function fn() {
  //   console.log(222);
  // }
  // var fn;
  // fn = function() {
  //   console.log(111);
  // }

  


</script>